﻿using System;

/// <summary>
///抽象工厂模式的主要角色如下。 
///抽象工厂（Abstract Factory）：提供了创建产品的接口，它包含多个创建产品的方法 newProduct()，可以创建多个不同等级的产品。
///具体工厂（Concrete Factory）：主要是实现抽象工厂中的多个抽象方法，完成具体产品的创建。
///抽象产品（Product）：定义了产品的规范，描述了产品的主要特性和功能，抽象工厂模式有多个抽象产品。
///具体产品（ConcreteProduct）：实现了抽象产品角色所定义的接口，由具体工厂来创建，它 同具体工厂之间是多对一的关系。
/// </summary>
namespace AbstractFactory
{
    class Program
    {
        static void Main(string[] args)
        {
            AbstractFactory abstractFactory = new ConcreteFactory1();
            var factory1ProductA = abstractFactory.newProductA();
            var factory1ProductB = abstractFactory.newProductB();
            factory1ProductA.show();
            factory1ProductB.show();

            AbstractFactory abstractFactory2 = new ConcreteFactory2();
            var factory2ProductA = abstractFactory2.newProductA();
            var factory2ProductB = abstractFactory2.newProductB();
            factory2ProductA.show();
            factory2ProductB.show();
            Console.ReadLine();
        }
    }

}
